package org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.futbolista;


import java.util.ArrayList;

import org.javahispano.javacup.modelo.Constantes;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.Balon;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.PosicionCampo;
import org.javahispano.javacup.tacticas_aceptadas.jcrosas.chuky.util.PosicionFutura;

/**
 * @author Joan Crosas
 *
 */
public class Oponente extends FutbolistaGenerico implements Comparable<Oponente> {
	
	private Config config;
	private ArrayList<Futbolista> defensasAsignados;
	
	private PosicionCampo posicion;
	private int iteracionesParaRematar;
	
	private double distanciaPorteria;
	private double distanciaCorner;
	private PosicionFutura posicionInterceptarBalon;

	/**
	 * 
	 */
	public Oponente( Config config ) {
		this.config = config;
		defensasAsignados = new ArrayList<Futbolista>();
	}
	
	public void setPosicion( PosicionCampo posicion ) {
		this.posicion = posicion;
		
		
		
		distanciaPorteria = posicion.distancia( FutbolistaBase.POSICION_PORTERIA );
		distanciaCorner = posicion.distancia( FutbolistaBase.POSICION_CORNER_DER );
		if( distanciaCorner > posicion.distancia( FutbolistaBase.POSICION_CORNER_DER ) ) {
			distanciaCorner = posicion.distancia( FutbolistaBase.POSICION_CORNER_DER );
		}
	}
	
	public void updateBalon( Balon balon ) {
		posicionInterceptarBalon = puedoInterceptar( balon );
	}
	
	public PosicionFutura puedoInterceptarBalon() {
		return posicionInterceptarBalon;
	}

	@Override
	public int getNumero() {
		return config.getNumero();
	}

	@Override
	public PosicionCampo getPosicion() {
		return posicion;
	}

	@Override
	public Rol getRol() {
		return config.getRol();
	}

	@Override
	public double getVelocidad() {
		return config.getVelocidad();
	}

	@Override
	public double getRemate() {
		return config.getRemate();
	}

	@Override
	public int getIndice() {
		return config.getIndice();
	}

	@Override
	public int getIteracionesParaRematar() {
		return iteracionesParaRematar;
	}
	
	public void setIteracionesParaRematar( int iteracionesParaRematar ) {
		this.iteracionesParaRematar = iteracionesParaRematar;
	}

	@Override
	public double getPrecision() {
		return config.getPrecision();
	}
	
	public double getDistanciaPorteria() {
		return distanciaPorteria;
	}
	
	public double getDistanciaCorner() {
		return distanciaCorner;
	}
	
	public double getAnguloPorteria() {
		return posicion.angulo( new PosicionCampo( Constantes.centroArcoInf ) );
	}
	
	public ArrayList<Futbolista> getDefensasAsignados() {
		return defensasAsignados;
	}
	
	

	@Override
	public int compareTo( Oponente oponente ) {
		// Ordenamos de menor a mayor
		double resultado = this.getDistanciaPorteria() - oponente.getDistanciaPorteria();
		if( resultado < 0.0 ) {
			return -1;
		} else if( resultado > 0.0 ) {
			return 1;
		}
		return 0;
	}

}
